export type FormItemType =
  | "input"
  | "textarea"
  | "select"
  | "radio"
  | "checkbox"
  | "switch"
  | "date"
  | "datetime"
  | "time"
  | "upload"
  | "number"
  | "password"
  | "cascader"
  | "tree-select"
  | "color-picker"
  | "slider"
  | "rate"
  | "button"
  | "autocomplete";

export interface FormItemOption {
  label: string;
  value: any;
  disabled?: boolean;
  children?: FormItemOption[];
}

export interface FormItemConfig {
  /** 字段名 */
  key: string;
  /** 字段标签 */
  name: string;
  /** 表单项类型 */
  type: FormItemType;
  /** 是否必填 */
  required?: boolean;
  /** 验证规则 */
  rules?: any[];
  /** 默认值 */
  defaultValue?: any;
  /** 占位符 */
  placeholder?: string;
  /** 是否禁用 */
  disabled?: boolean;
  /** 标签宽度 */
  labelWidth?: string;
  /** 选项数据（用于select、radio、checkbox等） */
  options?: FormItemOption[];
  /** 扩展参数 */
  params?: {
    /** 输入框类型 */
    inputType?: string;
    /** 行数（textarea） */
    rows?: number;
    /** 最大长度 */
    maxLength?: number;
    /** 最小值（number） */
    min?: number;
    /** 最大值（number） */
    max?: number;
    /** 步长（number） */
    step?: number;
    /** 是否显示密码（password） */
    showPassword?: boolean;
    /** 是否可清空 */
    clearable?: boolean;
    /** 是否可搜索（select） */
    filterable?: boolean;
    /** 是否多选 */
    multiple?: boolean;
    /** 日期格式 */
    format?: string;
    /** 上传文件类型限制 */
    accept?: string;
    /** 上传文件数量限制 */
    limit?: number;
    /** 上传接口地址 */
    action?: string;
    /** 树形结构数据 */
    treeData?: any[];
    /** 级联选择器配置 */
    cascaderProps?: any;
    /** 滑块配置 */
    sliderProps?: any;
    /** 评分配置 */
    rateProps?: any;
    /** 按钮文本 */
    text?: string;
    /** 按钮类型 */
    type?: string;
    /** 按钮是否朴素 */
    plain?: boolean;
    /** 按钮是否圆角 */
    round?: boolean;
    /** 按钮是否圆形 */
    circle?: boolean;
    /** 按钮是否加载中 */
    loading?: boolean;
    /** 按钮图标 */
    icon?: string;
    /** 按钮是否自动聚焦 */
    autofocus?: boolean;
    /** 按钮原生类型 */
    nativeType?: string;
    /** 按钮点击事件 */
    onClick?: () => void;
    /** 自动完成建议函数 */
    fetchSuggestions?: (
      queryString: string,
      callback: (suggestions: any[]) => void
    ) => void;
    /** 是否在获得焦点时触发建议 */
    triggerOnFocus?: boolean;
    /** 防抖延迟时间 */
    debounce?: number;
    /** 其他自定义参数 */
    [key: string]: any;
  };
  /** 栅格布局配置 */
  col?: {
    xs?: number;
    sm?: number;
    md?: number;
    lg?: number;
    xl?: number;
    span?: number;
  };
  /** 是否显示 */
  show?: (formData: any) => boolean;
}

export interface DynamicFormProps {
  /** 表单配置 */
  formConfig: FormItemConfig[];
  /** 表单数据 */
  modelValue: Record<string, any>;
  /** 表单标签宽度 */
  labelWidth?: string;
  /** 栅格间隔 */
  gutter?: number;
  /** 表单尺寸 */
  size?: "large" | "default" | "small";
  /** 是否禁用整个表单 */
  disabled?: boolean;
  /** 表单验证规则 */
  rules?: Record<string, any[]>;
  /** 按钮类型，submit显示确认取消，默认显示搜索重置 */
  type?: "submit" | "search";
  /** 是否显示底部按钮 */
  showButtons?: boolean;
}

export interface DynamicFormInstance {
  /** 验证表单 */
  validate: () => Promise<boolean>;
  /** 重置表单 */
  resetFields: () => void;
  /** 清空验证 */
  clearValidate: () => void;
  /** 验证指定字段 */
  validateField: (prop: string) => Promise<boolean>;
}
